home *** CD-ROM | disk | FTP | other *** search
/ Isometric Game Programming with DirectX 7.0 / Isometric Game Programming.iso / source / chapter13 / isohex13_1 / gdicanvas.cpp < prev    next >
C/C++ Source or Header  |  2000-05-18  |  3KB  |  129 lines

  1. // GDICanvas.cpp: implementation of the CGDICanvas class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "GDICanvas.h"
  6.  
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10.  
  11. CGDICanvas::CGDICanvas()
  12. {
  13.     //initialize all members to NULL or 0
  14.     hdcMem=NULL;
  15.     hbmNew=NULL;
  16.     hbmOld=NULL;
  17.     nWidth=0;
  18.     nHeight=0;
  19. }
  20.  
  21. CGDICanvas::~CGDICanvas()
  22. {
  23.     //if the hdcMem has not been destroyed, do so
  24.     if(hdcMem) Destroy();
  25. }
  26.  
  27. //////////////////////////////////////////////////////////////////////
  28. //Creation/Loading
  29. //////////////////////////////////////////////////////////////////////
  30.  
  31. //loads bitmap from a file
  32. void CGDICanvas::Load(HDC hdcCompatible,LPCTSTR lpszFilename)
  33. {
  34.     //if the hdcMem is not null, destroy
  35.     if(hdcMem) Destroy();
  36.  
  37.     //create the memory dc
  38.     hdcMem=CreateCompatibleDC(hdcCompatible);
  39.  
  40.     //load the image
  41.     hbmNew=(HBITMAP)LoadImage(NULL,lpszFilename,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
  42.  
  43.     //select the image into the dc
  44.     hbmOld=(HBITMAP)SelectObject(hdcMem,hbmNew);
  45.  
  46.     //fetch the bitmaps properties
  47.     BITMAP bmp;
  48.     GetObject(hbmNew,sizeof(BITMAP),(LPVOID)&bmp);
  49.  
  50.     //assign height and width
  51.     nWidth=bmp.bmWidth;
  52.     nHeight=bmp.bmHeight;
  53.  
  54. }
  55.  
  56. //creates a blank bitmap
  57. void CGDICanvas::CreateBlank(HDC hdcCompatible, int width, int height)
  58. {
  59.     //if the hdcMem is not null, destroy
  60.     if(hdcMem) Destroy();
  61.  
  62.     //create the memory dc
  63.     hdcMem=CreateCompatibleDC(hdcCompatible);
  64.  
  65.     //create the image
  66.     hbmNew=CreateCompatibleBitmap(hdcCompatible,width,height);
  67.  
  68.     //select the image into the dc
  69.     hbmOld=(HBITMAP)SelectObject(hdcMem,hbmNew);
  70.  
  71.     //assign the width and height
  72.     nWidth=width;
  73.     nHeight=height;
  74.  
  75. }
  76.  
  77. //////////////////////////////////////////////////////////////////////
  78. //Clean-up
  79. //////////////////////////////////////////////////////////////////////
  80.  
  81. //destroys bitmap and dc
  82. void CGDICanvas::Destroy()
  83. {
  84.     //restore old bitmap
  85.     SelectObject(hdcMem,hbmOld);
  86.  
  87.     //delete new bitmap
  88.     DeleteObject(hbmNew);
  89.  
  90.     //delete device context
  91.     DeleteDC(hdcMem);
  92.  
  93.     //set all members to 0 or NULL
  94.     hdcMem=NULL;
  95.     hbmNew=NULL;
  96.     hbmOld=NULL;
  97.     nWidth=0;
  98.     nHeight=0;
  99. }
  100.  
  101. //////////////////////////////////////////////////////////////////////
  102. //Conversion
  103. //////////////////////////////////////////////////////////////////////
  104.  
  105. //converts to HDC
  106. CGDICanvas::operator HDC()
  107. {
  108.     //return the hdcMem member
  109.     return(hdcMem);
  110. }
  111.  
  112. //////////////////////////////////////////////////////////////////////
  113. //Returning information
  114. //////////////////////////////////////////////////////////////////////
  115. //return width
  116. int CGDICanvas::GetWidth()
  117. {
  118.     //return the width
  119.     return(nWidth);
  120. }
  121.  
  122. //return height
  123. int CGDICanvas::GetHeight()
  124. {
  125.     //return the height
  126.     return(nHeight);
  127. }
  128.  
  129.